<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" title="Sergio Villar" href="mailto:svillar@igalia.com">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=392200">
<link href="../../../css/support/grid.css" rel="stylesheet">
<link href="../../../css/support/alignment.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="../../../fonts/ahem.css">
<link rel="help" href="https://drafts.csswg.org/css-grid/#track-sizing">
<meta name="assert" content="Checks resolution of content sized grid columns and verifies that items are processed by ascending span to compute column breadths">
<style>
.grid {
    font: 10px/1 Ahem;
 }
.gridWidth300 {
    width: 300px;
}
.gridMinContentFixedAndAuto {
    grid-template-columns: minmax(min-content, 15px) auto;
}
.gridMaxContentFixedAndAuto {
    grid-template-columns: minmax(max-content, 15px) auto;
}
.gridAutoAndAuto {
    grid-template-columns: auto auto;
}
.gridMinContentAndMinContentFixed {
    grid-template-columns: min-content minmax(min-content, 30px);
}
.gridMinContentAndMaxContentFixed {
    grid-template-columns: min-content minmax(max-content, 30px);
}
.gridMaxContentAndMinContent {
    grid-template-columns: max-content min-content;
}
.gridFixedMinContentAndMaxContent {
    grid-template-columns: minmax(10px, min-content) max-content;
}
.gridFixedMaxContentAndMinContent {
    grid-template-columns: minmax(10px, max-content) min-content;
}
.gridAutoMinContent {
    grid-template-columns: auto min-content;
}
.gridAutoMaxContent {
    grid-template-columns: auto max-content;
}
.gridMaxContentAndMinContentFixed {
    grid-template-columns: max-content minmax(min-content, 35px);
}
.gridMaxContentAndMaxContentFixed {
    grid-template-columns: max-content minmax(max-content, 35px);
}
.gridMinContentFixedAndFixedFixedAndAuto {
    grid-template-columns: minmax(min-content, 20px) minmax(20px, 30px) auto;
}
.gridAutoAndFixedFixedAndMaxContentFixed {
    grid-template-columns: auto minmax(20px, 30px) minmax(max-content, 20px);
}
.gridMaxContentAndMaxContentFixedAndMaxContent {
    grid-template-columns: max-content minmax(max-content, 20px) max-content;
}
.gridAutoAndMinContentFixedAndMinContent {
    grid-template-columns: auto minmax(min-content, 30px) min-content;
}

</style>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<div class="grid gridMinContentFixedAndAuto justifyContentStart" id="gridMinContentFixedAndAuto">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="grid gridAutoAndAuto justifyContentStart" id="gridAutoAndAuto">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="grid gridMinContentAndMinContentFixed" id="gridMinContentAndMinContentFixed">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="grid gridMaxContentAndMinContent" id="gridMaxContentAndMinContent">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="grid gridFixedMinContentAndMaxContent" id="gridFixedMinContentAndMaxContent">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="grid gridFixedMaxContentAndMinContent" id="gridFixedMaxContentAndMinContent">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="grid gridMinContentAndMaxContentFixed" id="gridMinContentAndMaxContentFixed">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMaxContentFixedAndAuto" id="gridMaxContentFixedAndAuto">
        <div class="firstRowBothColumn">XXXX XXXX</div>
    </div>
</div>

<div class="grid gridAutoMinContent justifyContentStart" id="gridAutoMinContent">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="grid gridAutoMaxContent justifyContentStart" id="gridAutoMaxContent">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMaxContentAndMinContentFixed" id="gridMaxContentAndMinContentFixed">
        <div class="firstRowBothColumn">XXXX XXXX</div>
    </div>
</div>

<div class="grid gridMaxContentAndMaxContentFixed" id="gridMaxContentAndMaxContentFixed">
    <div class="firstRowBothColumn">XXXX XXXX</div>
</div>

<!-- Check that items are processed by ascending span instead of going track by track forbidding extra space distribution. -->
<div class="constrainedContainer">
    <div class="grid gridMinContentFixedAndAuto" id="gridMinContentFixedAndAutoUnsortedConstrained">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowSecondColumn">XXXX XXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridAutoAndAuto" id="gridAutoAndAutoUnsortedConstrained">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowSecondColumn">XXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMinContentAndMinContentFixed" id="gridMinContentAndMinContentFixedUnsortedConstrained">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">XX XX XX</div>
        <div class="firstRowSecondColumn">XXXX XXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMaxContentAndMinContent" id="gridMaxContentAndMinContentUnsortedConstrained">
        <div class="firstRowBothColumn">XXX XXX</div>
        <div class="firstRowSecondColumn">XXXXXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridFixedMinContentAndMaxContent" id="gridFixedMinContentAndMaxContentUnsortedConstrained">
        <div class="firstRowBothColumn">XXXXX XX</div>
        <div class="firstRowSecondColumn">XXX</div>
        <div class="firstRowSecondColumn">XXXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridFixedMaxContentAndMinContent" id="gridFixedMaxContentAndMinContentUnsortedConstrained">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">X X</div>
        <div class="firstRowSecondColumn">XXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMinContentAndMaxContentFixed" id="gridMinContentAndMaxContentFixedUnsortedConstrained">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowSecondColumn">XXXX XXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMaxContentFixedAndAuto" id="gridMaxContentFixedAndAutoUnsortedConstrained">
        <div class="firstRowBothColumn">XX XX</div>
        <div class="firstRowSecondColumn">XXXX</div>
        <div class="firstRowSecondColumn">XXX XXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridAutoMinContent" id="gridAutoMinContentUnsortedConstrained">
        <div class="firstRowBothColumn">XX XX XX XX</div>
        <div class="firstRowSecondColumn">XXXXXX XXXXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridAutoMaxContent" id="gridAutoMaxContentUnsortedConstrained">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">XXX XXX</div>
        <div class="firstRowSecondColumn">XXXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMaxContentAndMinContentFixed" id="gridMaxContentAndMinContentFixedUnsortedConstrained">
        <div class="firstRowBothColumn">XXX XXX</div>
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowSecondColumn">XXXX XXXX</div>
        <div class="firstRowSecondColumn">XX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMaxContentAndMaxContentFixed" id="gridMaxContentAndMaxContentFixedUnsortedConstrained">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">XX XX XX XX</div>
        <div class="firstRowSecondColumn">XXXXXXX</div>
    </div>
</div>

<!-- Check that items are processed by ascending span instead of going track by track allowing extra space distribution. -->
<div class="grid gridMinContentFixedAndAuto justifyContentStart" id="gridMinContentFixedAndAutoUnsorted">
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowSecondColumn">XXXX XXXX</div>
</div>

<div class="grid gridAutoAndAuto justifyContentStart" id="gridAutoAndAutoUnsorted">
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowSecondColumn">XXX</div>
</div>

<div class="grid gridMinContentAndMinContentFixed" id="gridMinContentAndMinContentFixedUnsorted">
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowBothColumn">XX XX XX XX</div>
    <div class="firstRowSecondColumn">XXXX XXXX</div>
</div>

<div class="grid gridMaxContentAndMinContent" id="gridMaxContentAndMinContentUnsorted">
    <div class="firstRowBothColumn">XXX XXX</div>
    <div class="firstRowSecondColumn">XXXXXXX</div>
</div>

<div class="grid gridFixedMinContentAndMaxContent" id="gridFixedMinContentAndMaxContentUnsorted">
    <div class="firstRowBothColumn">XXXXX XX</div>
    <div class="firstRowSecondColumn">XXX</div>
    <div class="firstRowSecondColumn">XXXXX</div>
</div>

<div class="grid gridFixedMaxContentAndMinContent" id="gridFixedMaxContentAndMinContentUnsorted">
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowBothColumn">X X</div>
    <div class="firstRowSecondColumn">XXXX</div>
</div>

<div class="grid gridMinContentAndMaxContentFixed" id="gridMinContentAndMaxContentFixedUnsorted">
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowSecondColumn">XXXX XXXX</div>
</div>

<div class="grid gridMaxContentFixedAndAuto justifyContentStart" id="gridMaxContentFixedAndAutoUnsorted">
    <div class="firstRowBothColumn">XX XX</div>
    <div class="firstRowSecondColumn">XXXX</div>
    <div class="firstRowSecondColumn">XXX XXX</div>
</div>

<div class="grid gridAutoMinContent justifyContentStart" id="gridAutoMinContentUnsorted">
    <div class="firstRowBothColumn">XX XX XX XX</div>
    <div class="firstRowSecondColumn">XXXXXX XXXXXX</div>
</div>

<div class="grid gridAutoMaxContent justifyContentStart" id="gridAutoMaxContentUnsorted">
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowBothColumn">XXX XXX</div>
    <div class="firstRowSecondColumn">XXXXX</div>
</div>

<div class="grid gridMaxContentAndMinContentFixed" id="gridMaxContentAndMinContentFixedUnsorted">
    <div class="firstRowBothColumn">XXX XXX</div>
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowSecondColumn">XXXX XXXX</div>
    <div class="firstRowSecondColumn">XX</div>
</div>

<div class="grid gridMaxContentAndMaxContentFixed" id="gridMaxContentAndMaxContentFixedUnsorted">
    <div class="firstRowBothColumn">XXXX XXXX</div>
    <div class="firstRowBothColumn">XX XX XX XX</div>
    <div class="firstRowSecondColumn">XXXXXXX</div>
</div>

<!-- The next four force the grid to grow only a particular subset of tracks above the limits -->
<div class="constrainedContainer">
    <div class="grid gridMinContentFixedAndAuto justifyContentStart" id="gridMinContentFixedAndAutoAboveLimits">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">XXXXXXXXXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMaxContentFixedAndAuto" id="gridMaxContentFixedAndAutoAboveLimits">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">XXXXXXXXXXXXXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridMinContentFixedAndFixedFixedAndAuto" id="gridMinContentFixedAndFixedFixedAndAuto">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">XXXXXXXXXX</div>
    </div>
</div>

<div class="constrainedContainer">
    <div class="grid gridAutoAndFixedFixedAndMaxContentFixed" id="gridAutoAndFixedFixedAndMaxContentFixed">
        <div class="firstRowBothColumn">XXXX XXXX</div>
        <div class="firstRowBothColumn">XXXXXXXXXXXXXXX</div>
    </div>
</div>

<div class="grid gridMaxContentAndMaxContentFixedAndMaxContent" id="gridMaxContentAndMaxContentFixedAndMaxContent">
    <div style="grid-row: 1; grid-column: 1;">X X X</div>
    <div style="grid-row: 1; grid-column: 3;">X X</div>
    <div style="grid-row: 1; grid-column: 1 / -1;">XX XX XX XX XX</div>
</div>

<div class="grid gridAutoAndMinContentFixedAndMinContent justifyContentStart" id="gridAutoAndMinContentFixedAndMinContent">
    <div style="grid-row: 1; grid-column: 1;">XX</div>
    <div style="grid-row: 1; grid-column: 1 / -1;">XXXXXXXXXXXXXXX</div>
    <div style="grid-row: 1; grid-column: 3;">XXX XXX</div>
</div>

<script>
function testGridColumnsValues(id, computedColumnValue) {
    test(function(){
        var div = document.getElementById(id);
        var readValue = getComputedStyle(div).gridTemplateColumns;
        assert_equals(readValue, computedColumnValue);
    }, `Element '${id}' grid-template-columns value computes to '${computedColumnValue}'`);
}

setup({ explicit_done: true });
document.fonts.ready.then(() => {
    testGridColumnsValues("gridMinContentFixedAndAuto", "15px 75px");
    testGridColumnsValues("gridAutoAndAuto", "45px 45px");
    testGridColumnsValues("gridMinContentAndMinContentFixed", "20px 30px");
    testGridColumnsValues("gridMaxContentAndMinContent", "70px 20px");
    testGridColumnsValues("gridFixedMinContentAndMaxContent", "10px 80px");
    testGridColumnsValues("gridFixedMaxContentAndMinContent", "60px 30px");
    testGridColumnsValues("gridMinContentAndMaxContentFixed", "20px 70px");
    testGridColumnsValues("gridMaxContentFixedAndAuto", "65px 25px");
    testGridColumnsValues("gridAutoMinContent", "70px 20px");
    testGridColumnsValues("gridAutoMaxContent", "20px 70px");
    testGridColumnsValues("gridMaxContentAndMinContentFixed", "70px 20px");
    testGridColumnsValues("gridMaxContentAndMaxContentFixed", "55px 35px");

    // Check that items are processed by ascending span to compute track breadths forbidding extra space distribution.
    testGridColumnsValues("gridMinContentFixedAndAutoUnsortedConstrained", "0px 40px");
    testGridColumnsValues("gridAutoAndAutoUnsortedConstrained", "10px 30px");
    testGridColumnsValues("gridMinContentAndMinContentFixedUnsortedConstrained", "0px 40px");
    testGridColumnsValues("gridMaxContentAndMinContentUnsortedConstrained", "0px 70px");
    testGridColumnsValues("gridFixedMinContentAndMaxContentUnsortedConstrained", "10px 70px");
    testGridColumnsValues("gridFixedMaxContentAndMinContentUnsortedConstrained", "10px 40px");
    testGridColumnsValues("gridMinContentAndMaxContentFixedUnsortedConstrained", "0px 90px");
    testGridColumnsValues("gridMaxContentFixedAndAutoUnsortedConstrained", "10px 40px");
    testGridColumnsValues("gridAutoMinContentUnsortedConstrained", "0px 60px");
    testGridColumnsValues("gridAutoMaxContentUnsortedConstrained", "0px 90px");
    testGridColumnsValues("gridMaxContentAndMinContentFixedUnsortedConstrained", "50px 40px");
    testGridColumnsValues("gridMaxContentAndMaxContentFixedUnsortedConstrained", "40px 70px");

    // Check that items are processed by ascending span to compute track breadths allowing extra space distribution.
    testGridColumnsValues("gridMinContentFixedAndAutoUnsorted", "15px 90px");
    testGridColumnsValues("gridAutoAndAutoUnsorted", "60px 30px");
    testGridColumnsValues("gridMinContentAndMinContentFixedUnsorted", "0px 40px");
    testGridColumnsValues("gridMaxContentAndMinContentUnsorted", "0px 70px");
    testGridColumnsValues("gridFixedMinContentAndMaxContentUnsorted", "10px 70px");
    testGridColumnsValues("gridFixedMaxContentAndMinContentUnsorted", "50px 40px");
    testGridColumnsValues("gridMinContentAndMaxContentFixedUnsorted", "0px 90px");
    testGridColumnsValues("gridMaxContentFixedAndAutoUnsorted", "15px 70px");
    testGridColumnsValues("gridAutoMinContentUnsorted", "50px 60px");
    testGridColumnsValues("gridAutoMaxContentUnsorted", "0px 90px");
    testGridColumnsValues("gridMaxContentAndMinContentFixedUnsorted", "50px 40px");
    testGridColumnsValues("gridMaxContentAndMaxContentFixedUnsorted", "40px 70px");

    // Check that only a subset of tracks grow above track limits.
    testGridColumnsValues("gridMinContentFixedAndAutoAboveLimits", "15px 95px");
    testGridColumnsValues("gridMaxContentFixedAndAutoAboveLimits", "15px 135px");
    testGridColumnsValues("gridMinContentFixedAndFixedFixedAndAuto", "20px 20px 60px");
    testGridColumnsValues("gridAutoAndFixedFixedAndMaxContentFixed", "110px 20px 20px");
    testGridColumnsValues("gridMaxContentAndMaxContentFixedAndMaxContent", "70px 20px 50px");
    testGridColumnsValues("gridAutoAndMinContentFixedAndMinContent", "55px 30px 65px");

    done();
});
</script>
